import { getToken, setToken, getUserInfo, setUserInfo } from '@/utils/auth';
import type { IUserState } from './index.d';
import type { IUserInfo } from '@/api/index.d';

export const MUDULE_NAME: string = 'user';

export const types = {
  TOKEN: 'TOKEN', // token信息
  USER_LOGOUT: 'USER_LOGOUT', // 退出登录
  USER_INFO: 'USER_INFO', // 用户信息
}

export default (state: IUserState = {
  token: getToken(),
  userInfo: getUserInfo() || {}
}, action: any) => {
  switch (action.type) {
    case types.TOKEN:
      return Object.assign({}, state, {
        token: action.token
      })
    case types.USER_INFO:
      return Object.assign({}, state, {
        userInfo: action.data
      })
    default: return state;
  }
}

// 更新token信息 如果传入值为 空默认取本地token
export function updateToken(token: string = getToken()) {
  
  // 把token信息缓存到本地
  setToken(token);
  
  return {
    type: types.TOKEN,
    token
  }
}

// 退出登录
export function loginOut() {
  return {
    type: types.USER_LOGOUT,
    token: ''
  }
}

// 获取用户信息
export function updateUserInfo(userInfo: IUserInfo) {

  // 把用户信息缓存到本地
  setUserInfo(userInfo);

  return {
    type: types.USER_INFO,
    data: userInfo
  }
}
